package cyccleJob

import (
	"encoding/json"
	"github.com/go-redis/redis/v8"
	"github.com/robfig/cron/v3"
	"go-gin-init/app/DB/cache"
	"go-gin-init/app/DB/mysql"
	"go-gin-init/app/job"
	"go-gin-init/app/models/model"
	"go.uber.org/zap"
	"time"
)

// Sql2Db 定时更新redis缓存
// 更新userList数据
// 更新策略：查出新数据，删除旧缓存
// 每天0:00 时刻更新
func Sql2Db() {

	job.JobServer = cron.New(cron.WithSeconds())

	_, err := job.JobServer.AddFunc("0 0 0 * * ?", func() {
		db := mysql.GetGormDB()
		var users []model.User
		db.Where("isDelete = 0").Find(&users)

		// 删除缓存
		err := cache.Del(cache.USERLIST)
		if err != nil && err != redis.Nil {
			zap.L().Error("定时任务", zap.Any("更新userList缓存数据错误", err))
			return
		}
		if err == redis.Nil {
			zap.L().Warn("定时任务", zap.Any("key is nil", err))
			return
		}

		// 序列化User结构体为JSON字符串
		jsonData, err := json.Marshal(users)
		if err != nil {
			zap.L().Error("定时任务", zap.Any("序列化userList缓存数据错误", err))
			return
		}

		// 跟新缓存
		cache.Set(cache.USERLIST, string(jsonData))
		zap.L().Info("定时任务:", zap.Any("更新userList缓存数据成功", time.Now()))
	})

	if err != nil {
		zap.L().Error("定时任务", zap.Any("更新userList缓存定时任务启动失败", err))
		return
	}

	zap.L().Info("定时任务-更新userList缓存任务添加成功")

}
